// pages/book/book.js
Page({
  data: {
    book: [],
    checkAll: false,
    price: "0.00"
  },
  onLoad: async function (options) {
    var module = await import("../../utils/util")
    var res = await module.getBookUrl()
    res.data.forEach(item => {
      item.totalPrice = Number(item.productCount * item.productPrice).toFixed(2);
      item.checked = false;
    })
    this.setData({ book: res.data })
  },
  //改变书籍本数的函数
  changeNum(event) {
    var id = event.currentTarget.dataset.goodid;        //获取当前事件的id
    var operate = event.currentTarget.dataset.operate;  //获取加法还是减法
    var book = this.data.book;
    book.forEach(item => {
      if (item.id == id) {
        item.productCount += Number(operate);     //改变选中的书的数量
        if (item.productCount < 0) {              //当数量为0的时候不能再减
          item.productCount = 0;
        }
        item.totalPrice = Number(item.productCount * item.productPrice).toFixed(2);     //更新小计
        item.checked = true
      }
    })
    this.reverse(book);
    var price = this.updatePrice(book);     //更新合计
    this.setData({ book, price })
  },
  //是否购买该书籍的函数
  addThis(event) {       //通过点击书籍前面的checkbox触发
    var id = event.currentTarget.dataset.id;    //获取该书籍的id值
    var book = this.data.book;
    book.forEach(item => {
      if (item.id == id) {
        item.checked = !item.checked;   //改变该书籍的checkbox的属性值
      }
    });
    this.reverse(book);
    var price = this.updatePrice(book); //更新合计
    this.setData({ price })
  },
  //全选框点击函数
  checkAll() {
    var checkAll = !this.data.checkAll;   //改变自己的check属性值
    var book = this.data.book;
    book.forEach(item => {
      item.checked = checkAll;            //让所有书籍都被选中
    })
    var price = this.updatePrice(book);   //更新合计
    this.setData({ checkAll, book, price })
  },
  //更新合计函数
  updatePrice(obj) {
    var addPrice = [];                  //新建一个空数组
    obj.forEach(item => {
      if (item.checked == true) {         //如果该书籍被选中
        addPrice.push(item.totalPrice); //就把它的小计推到数组中去
      }
    })
    var price = this.handlePrice(addPrice).toFixed(2);  //处理一下合计
    return price;   //将总价返回
  },
  //处理合计函数
  handlePrice(arr) {
    var sum = 0;
    arr.forEach(item => {     //遍历数组，将数组的每一个数累加
      sum += Number(item);  //处理一下每个元素，使其成为数字
    })
    return sum              //返回总价
  },
  //反选函数
  reverse(arr) {
    var reverse = arr.every(item => {    //判断是否每本书都被选中
      return item.checked
    });
    if (reverse) {                        //反选，如果每一本书都被选中
      this.setData({ checkAll: true })     //就让全选框也被选中
    } else {
      this.setData({ checkAll: false })
    }
  }
})